#!/bin/bash
# 获取当前目录下所有的目录和文件，并通过ls -lt排序
## 上传目录
upload_dir=$2
## 部署目录
deploy_dir=$2
## 需要部署jar包名
jar_name="$1.jar"
application_name=$1
## 参数为空 && 默认启动文件不存在
if [ -z $1 ] && [ ! -e $upload_dir$application_name'.jar' ]; then
    echo '默认启动jar['$upload_dir$application_name'.jar]不存在'
    echo '请指定目录：'$deploy_dir'中的jar包名'
    exit
    else
      if [ -z $1 ];then
         jar_name=$application_name'.jar'
      fi
fi
upload_jar="$upload_dir$jar_name"
substring="launch-$application_name"
max=-0
min=100000000
## 1. 取部署目录里最新部署的jar(即取数字最大的)
cd "$deploy_dir"
list=$(ls -lt)
file_names=($(echo "$list" | awk '{if(NF>1) print $NF}'))

for file_name in "${file_names[@]}"; do
  if [[ $file_name == *$substring* ]]; then
    # 获取部署jar 最后的数字
    numbers=$(echo $file_name  | sed 's/.*-\([0-9]*\)\.jar/\1/')
    if [ "$numbers" -gt "$max" ]; then
    max="$numbers"
    fi
    if [ "$numbers" -lt "$min" ]; then
    min="$numbers"
    fi
 fi
done
sequence=$((max+1))
## 2. 删除历史的版本
echo  "最新jar版本 $sequence"
echo  "最旧jar版本 $min"
diff=$((sequence-min))
threshold_value=4
if [ "$min" -ne 100000000 ]; then
  if [ "$diff" -gt "$threshold_value" ]; then
    # 循环遍历数字范围 1 到 $loop_count
    for ((i=$min; i<$((min+threshold_value-3)); i++)); do
    echo "删除文件 $deploy_dir launch-$application_name-$i.jar"
    rm -rf $deploy_dir'launch-'$application_name'-'$i'.jar'
    done
  fi
fi

new_jar_name="launch-$application_name-$sequence.jar"

## 2. 新上传的jar 复制到 部署目录中.
cp $upload_jar "$deploy_dir$new_jar_name"



## 3. 开始启动服务
start_proc_pid=$(ps aux | grep $application_name | awk '$12 ~ /.*jar.*/ {print $2}')

if [ -z $start_proc_pid ]; then ##  字符isEmpty()
  printf '进程不存在'
 else
  echo '获取进程pid:'$start_proc_pid
  printf '开始杀进程....\n'
  kill -9 $start_proc_pid
  printf '已杀死进程\n'
fi


## & 关闭session 就关关闭程序
## nohup 关闭session 不会关闭程序，但是ctrl+c 会关闭程序
printf '启动进程中...\n'
nohup java -jar -Xms2048m -Xmx4096m  "$deploy_dir$new_jar_name"  &
start_proc_pid=$(ps aux | grep ''$application_name'' | awk '$12 ~ /.*jar.*/ {print $2}')
echo '新进行PID:'$start_proc_pid' , 新jar '$new_jar_name
